请教各位如何编程实现"无优先级运算问题"!急!

来源:百度知道 编辑:UC知道 时间:2024/09/25 18:18:01
这是计算机算法设计与分析(第3版 王晓东编著)一书算法实现题6-9,请各位大侠帮帮忙,答案满意小弟绝对追加最高分!万分感谢!

问题描述:给定n个正整数和4个运算符+,-,*,/,且运算符无优先级,如2+3*5=25.对于任意给定的整数m,试设计一个算法,
用以上给出的n个数和4个运算符,产生整数m,且用的运算次数最少。给出的n个数中每个数最多只能用一次,但每种运算符可以任意使用。

算法设计:对于给定的n个正整数,设计一个优先队列式分支限界法,用最少的无优先级运算次数产生整数m。

数据输入:由文件input.txt给出输入数据。第一行有2个正整数n和m。第二行是给定的用于运算的n个正整数。

结果输出:将计算的产生整数m的最少无优先级运算次数以及最优无优先级运算表达式输出到文件output.txt。

输入文件示例:
input.txt
5 25
5 2 3 6 7

输出文件示例:
output.txt
2
2+3*5
答案发到我邮箱吧:ljj0217@126.com

...晕,老大这题不是很简单的,不过在《算法分析与实验题解》上有这题,你可以自己去看看,给你个C#版本的,down的,和C++差不多
主窗体源码(C#)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace 无优先级运算
{
public partial class 无优先级运算 : Form
{
public 无优先级运算()
{
InitializeComponent();
}
private int Factorial(int n)//计算阶乘
{
if (n < 1) return -1;
else if (n == 1) return 1;
else return n * Factorial(n - 1);
}
private double doCalculation(double x, double y, string sign)//计算表达式
{
if (sign == "+") return (x + y);
else if (sign == "-") return (x - y);
else if (sign == "*") return (x * y);
else if (sign == "/") return (x / y);
else return 0.0;
}

/*
这个全排列穷举算法的核心部分基于这样一个思想:
从小到大列举所有的可能的全排列 <